# 1️⃣ 283. moveZeroes

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。

# javascript 双指针遍历

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var moveZeroes = function(nums) {
    let pc = nums.length - 1;
    for (let i = nums.length - 1; i > 0; i--) {
        const element = nums[i];
        if(element === 0 && pc !== i){
            for (let j = i; j < pc; j++) {
                nums[j] = nums[j + 1];
            }
            nums[pc] = 0;
            pc--;
        }
    }
    if(nums[0] === 0){
        for (let m = 0; m < pc; m++) {
            nums[m] = nums[m + 1];
        }
        nums[pc] = 0;
    }
};

结果 执行用时: 152 ms , 在所有 JavaScript 提交中击败了 20.59% 的用户 内存消耗: 45.5 MB , 在所有 JavaScript 提交中击败了 52.41% 的用户

解题分析

  • 时间复杂度:O(n^2),其中 n 是 nums 的长度。
  • 空间复杂度:O(1)。

Tips

扩展-C


# javascript Bit manipulation

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 * 输入: nums = [0,1,0,3,12] => [1,3,12,0,0]
 */
var moveZeroes = function(nums) {
    let k = 0
    for (let i = 0; i < nums.length; i++){
        if (nums[i] == 0){
            k++;
        } else {
            if(k > 0){
                nums[i-k] = nums[i];
                nums[i] = 0;
            }
        }
    }
};

结果 执行用时: 88 ms , 在所有 JavaScript 提交中击败了 72.65% 的用户 内存消耗: 45.8 MB , 在所有 JavaScript 提交中击败了 49.41% 的用户

解题分析

  • 时间复杂度:O(n),其中 n 是 nums 的长度。
  • 空间复杂度:O(1)。

Tips

扩展-C


(opens new window)